package com.xinz.srmi.impl;
//package com.ppsea.srmi.impl;
//
//import java.lang.reflect.Method;
//import java.net.InterfaceAddress;
//import java.util.Hashtable;
//
//import com.ppsea.srmi.IndexMap;
//import com.ppsea.srmi.NativeInterfaceProvider;
//import com.ppsea.srmi.ServiceException;
//import com.ppsea.srmi.Session;
//import com.ppsea.srmi.SessionDemand;
///**
// * NativeInterfaceProvider的简单实现<br>
// * 
// * 通过register方法注册接口类型和实现对象
// * 
// * @author xingyun
// *
// */
//public class SimpleInterfaceProvider extends AbstractInterfaceProvider{
//	Hashtable<Class<?>, Object> implTable = new Hashtable<Class<?>, Object>();
//	
//	
//	/**
//	 * 添加一个可以提供远程调用的对象
//	 * 将会把所有实现的接口和自己绑定
//	 * @param clazz
//	 */
//	public void registerAll(Object obj){
//		Class<?> clazz = obj.getClass();
//		Class<?> interfaces[] = clazz.getInterfaces();
//		assert interfaces.length>0:"类型"+clazz+"没有实现任何接口...";
//		for(int i=0;i<interfaces.length;i++){
//			register((Class)interfaces[i], obj);
//		}
//	}
//	/**
//	 * 给接口绑定具体的本地实现，以供远程调用
//	 * @param interfaceClass
//	 * @param implementClass
//	 */
//	public<I,C extends I> void register(Class<I> interfaceClass,C implement){
//		if(implTable.put(interfaceClass, implement)==null){
//			addInterface(interfaceClass);
//		}
//	}
//	public void deregisterAll(Class<?>clazz){
//		Class<?> interfaces[] = clazz.getInterfaces();
//		for(int i=0;i<interfaces.length;i++){
//			deregister(interfaces[i]);
//		}
//	}
//	public void deregister(Class<?> interfaceClass){
//		implTable.remove(interfaceClass);
//	}
//	
//	
//	
//	@Override
//	public Object provideImpl(Session session,Method method) throws InstantiationException, IllegalAccessException {
//		Class<?> clazz = method.getDeclaringClass();
//		Object result = implTable.get(clazz);
//		if(result==null) throw new InstantiationException("没有找到接口"+clazz+"对应的实现");
//		return result;
//	}
//
//}
